package com.lh.utils;

import com.lh.entity.table.FileProperties;
import com.lh.entity.table.MessageProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

/**
 * 固定URL+固定Header密钥的短信发送工具类（仅支持GET，调用仅需传手机号和内容）
 */
@Component
public class SmsGetSenderWithConfigUtil {
    // 2. 固定Header参数（键名+密钥值，从接口文档获取）
    // 3. 固定超时时间（单位：毫秒，避免请求长期阻塞）
    @Autowired
    private MessageProperties messageProperties;
    private static final int CONNECT_TIMEOUT = 5000;
    private static final int READ_TIMEOUT = 5000;
    // 4. 固定短信内容最大长度（防止超接口限制）
    private static final int MAX_MESSAGE_LENGTH = 70;

    /**
     * 发送短信（GET方法，URL和Header密钥已固定，仅需传手机号和内容）
     * @param phone 接收手机号（11位国内有效手机号，如13177329305）
     * @param message 短信内容（支持中文，自动URL编码）
     * @return 接口返回的原始响应结果
     * @throws IllegalArgumentException 手机号/内容不合法时抛出
     * @throws IOException 网络异常、接口不可达、响应码非200时抛出
     */
    public String sendSmsByGet(String phone, String message)
            throws IllegalArgumentException, IOException {
        String MESSAGE_PATH = messageProperties.getPath();
        // 1. 仅校验手机号和短信内容（URL和Header已固定，无需外部校验）
        validatePhoneAndMessage(phone, message);
        System.out.println(phone);
        System.out.println(messageProperties.getPath());
        //发给数据和市长的
        if(phone!=null && (phone.equals("19888483572") || phone.equals("15072820805"))){
            return "待研判";
        }

        // 不发送在这里return;
        // 2. 短信内容URL编码（处理中文、空格等特殊字符，避免URL解析错误）
        String encodedMessage = URLEncoder.encode(message, StandardCharsets.UTF_8.name());

        // 3. 拼接完整GET请求URL（固定URL + 编码后的业务参数）
        String fullRequestUrl = String.format("%s?phone=%s&message=%s",
                MESSAGE_PATH, phone, encodedMessage);
        // 4. 发起GET请求（自动携带固定Header）
        HttpURLConnection connection = null;
        BufferedReader responseReader = null;
        try {
            if (MESSAGE_PATH!=null && MESSAGE_PATH.length()>10){
                URL requestUrl = new URL(fullRequestUrl);
                connection = (HttpURLConnection) requestUrl.openConnection();
                // 配置请求基础信息
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(CONNECT_TIMEOUT);
                connection.setReadTimeout(READ_TIMEOUT);
                // 核心：自动添加固定Header密钥（无需外部传入）
                // 基础请求头（避免部分接口拦截无User-Agent的请求）
                connection.setRequestProperty("User-Agent", "SmsGetSender/1.0");
                connection.setRequestProperty("Accept", "*/*");

                // 5. 处理接口响应
                int responseCode = connection.getResponseCode();
                // 非200响应码视为请求失败（如404接口不存在、500服务器错误）
                if (responseCode != HttpURLConnection.HTTP_OK) {
                    throw new IOException(String.format(
                            "GET请求失败：响应码=%d，请求URL=%s",
                            responseCode, fullRequestUrl
                    ));
                }
                // 读取响应内容并返回
                responseReader = new BufferedReader(
                        new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)
                );

                StringBuilder responseContent = new StringBuilder();
                String line;
                while ((line = responseReader.readLine()) != null) {
                    responseContent.append(line);
                }
                return responseContent.toString();
            }else{
                return null;
            }

        } finally {
            // 6. 关闭资源（避免内存泄漏和连接占用）
            if (responseReader != null) {
                try {
                    responseReader.close();
                } catch (IOException e) {
                    System.err.println("响应流关闭异常：" + e.getMessage());
                }
            }
            if (connection != null) {
                connection.disconnect();
            }
        }
    }

    /**
     * 仅校验手机号和短信内容的合法性
     */
    private static void validatePhoneAndMessage(String phone, String message) {
        // 手机号校验：非空+11位国内格式（13/14/15/17/18/19开头）

        if (phone == null || phone.trim().isEmpty()) {
            throw new IllegalArgumentException("无效手机号：" + phone + "，请输入11位国内有效手机号（如13177329305）");
        }
        // 短信内容校验：非空+不超长
        if (message == null || message.trim().isEmpty()) {
            throw new IllegalArgumentException("短信内容不能为空");
        }
        if (message.length() > MAX_MESSAGE_LENGTH) {
            throw new IllegalArgumentException(String.format(
                    "短信内容过长：当前%d字，最大支持%d字",
                    message.length(), MAX_MESSAGE_LENGTH
            ));
        }
    }

}